﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ITProject.Domain.Entities;
using ITProject.Domain;

namespace ITProject.Repository.Abstract
{
    public interface IUserRepository
    {
        User Add(User user);
        void SetUserLastVisitDate(User user);
        User GetUserByLogin(string login);
        bool IsAccountExist(string login, string email);
        bool ActivateAccount(string hash);
        void AddHash(int id, string hash);
        /// <summary>
        /// Metoda do pobierania liczby nieprzeczytanych wiadomości użytkownika.
        /// Autor: Jakub Szatkowski
        /// </summary>
        /// <param name="user">Użytkownik dla którego sprawdzamy liczbę nieprzeczytanych wiadmości.</param>
        /// <returns>Liczba nie przeczytanych wiadomości.</returns>
        int GetUnreadMessages(User user);

        /// <summary>
        /// Metod do pobierania loginu mając tylko identyfikator użytkownika (np. klucz obcy innej tabeli).
        /// Autor: Jakub Szatkowski
        /// </summary>
        /// <param name="id">Identyfikator użytkownika.</param>
        /// <returns>Encja użytkownika.</returns>
        User GetUserById(int id);

        /// <summary>
        /// Metoda pozwalająca pobrać wszystkich użytkowników serwisu ITProject.
        /// Autor: Jakub Szatkowski
        /// </summary>
        /// <returns>Tablica wszystkich użytkowników serwisu ITProject</returns>
        User[] GetAllUsers();

        Profil GetProfilById(int id);
        void EditUserData(User user, Profil profil, string login);
        string GetAvatarByLogin(string Login);
        IEnumerable<User> GetAllUsers(int str);
        int getCountSite();
        IEnumerable<Profil> GetAllProfil();
        UserRole GetUserRole(int id);
        UserState GetUserState(int id);

        List<SVNHistory> GetRepositoryEntry(int projectID, string userName);
    }
}